package com.ytjj.qmyx.users.model.response;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

/**
 * @author jiawei
 * @date 2023年10月20日 11:49
 * @describe 获取订单实体
 */
@Data
public class QyOrdersResponse {
    /**
     * 表明接口调用是否成功。值为0时表示接口调用成功
     * 0: 接口返回正确；
     * 1: 用appid和appsecret作为认证方式时，表示认证不通过；
     * 2: 用appid和token作为认证方式时，表示 token 过期；
     */
    private Integer rlt;

    /**
     * 表示该用户订单类数据的条目总数，而非此次请求返回的订单数量。用于控制分页。
     */
    private Integer count;

    /**
     * 用一个数组表示用户订单列表的数据。
     */
    private List<Order> orders;


    @Data
    public class Order{
        /**
         * 用于排序，显示订单列表时订单按index值升序排列；不设定index的订单将排在后面；index相同或未设定的订单将按照其在 JSON 中出现的顺序排列
         */
        private Integer index;

        /**
         * 用一个数组表示该订单包含的区块
         */
        private List<Block> blocks;


    }

    @Data
    public class Block{

        /**
         * 用于排序，显示订单时区块按index值升序排列；不设定index的区块将排在后面；index相同或未设定的区块将按照其在 JSON 中出现的顺序排列。
         */
        private Integer index;

        /**
         * 用一个数组表示该区块包含的数据。
         */
        private List<DataInfo> data;

        /**
         * 表示该区块是否作为该订单的标题行，true表示是标题行，false表示不是标题行。
         * 当一个区块是标题行时，它将会以订单标题的样式进行显示；而且点击该区块时，该订单会有展开/收起表现，被指定为is_title的项，它的data数据项的返回数组仅能有一个元素作为订单标题显示。每个blocks中都需要指定一个区块作为标题。
         */
//        @Getter(AccessLevel.NONE)
//        @Setter(AccessLevel.NONE)
        @JsonProperty("is_title")
        private boolean is_title;

//        public Boolean getIsTitle() {
//            return is_title;
//        }
//
//        public void setIsTitle(boolean is_title) {
//            this.is_title = is_title;
//        }
    }

    @Data
    public class DataInfo{

        /**
         * 数据项的名称，用于区别不同的数据。
         */
        private String key;

        /**
         * 该数据显示的值
         */
        private String value;

        /**
         * 该项数据显示的名称
         */
        private String label;

        /**
         * 用于排序，显示数据时数据项按index值升序排列；不设定index的数据项将排在后面；index相同或未设定的数据项将按照其在 JSON 中出现的顺序排列。
         */
        private Integer index;

        /**
         * 超链接地址。若指定该值，则该项数据将显示为超链接样式，点击后跳转到其值所指定的 URL 地址。
         */
        private String href;

        /**
         * 表示该项数据是否可编辑，true为可编辑，false为不可编辑。可编辑时该项数据的值将显示在一个输入框内，内容被编辑后将调用modify_cb接口提交更新。
         */
        private boolean edit;

        /**
         * 用于标识该项数据是否为select下拉框。true表示该项数据为select下拉框的形式，且当select选项为true时，value字段应该为一个数组的形式value字段应该为一个数组的形式（可以在value中指定初始化check为true的默认选中现，如果没指定则默认选中第一项）。
         */
        private boolean select;

        /**
         * 配合select一起使用，用于标识该select下拉框选项是否被选中。true表示该数据项被选中，且check为true的选项仅有一个。
         */
        private boolean check;

    }

}
